bitkeeper revision 1.1482 (428dbc17RT9NQ-_ttXtXBKQgwnM38g)
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 20 May 2005 10:29:43 +0000 (10:29 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Fri, 20 May 2005 10:29:43 +0000 (10:29 +0000)
Ensure the static correspondence IRQ0<->FIRST_DEVICE_VECTOR is
reflected in the vector_irq[] and irq_vector[] arrays.
Signed-off-by: Keir Fraser <keir@xensource.com>
xen/arch/x86/i8259.c
xen/arch/x86/io_apic.c
xen/arch/x86/vmx.c
xen/include/asm-x86/irq.h

index 811126005049b99d7b07e81c5cfc5384f2e84532..91bc24f5d9f070cf45423c741028c0694ce1fccc 100644 (file)
@@ -391,18 +391,18 @@ void __init init_IRQ(void)
         set_intr_gate(FIRST_EXTERNAL_VECTOR+i, interrupt[i]);
     }
 
-#ifdef CONFIG_SMP
     /*
      * IRQ0 must be given a fixed assignment and initialized,
      * because it's used before the IO-APIC is set up.
      */
+    irq_vector[0] = FIRST_DEVICE_VECTOR;
+    vector_irq[FIRST_DEVICE_VECTOR] = 0;
     set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]);
 
     /* Various IPI functions. */
     set_intr_gate(EVENT_CHECK_VECTOR, event_check_interrupt);
     set_intr_gate(INVALIDATE_TLB_VECTOR, invalidate_interrupt);
     set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt);
-#endif 
 
     /* Self-generated IPI for local APIC timer. */
     set_intr_gate(LOCAL_TIMER_VECTOR, apic_timer_interrupt);
index bb69348b14cea6faf3286654d29d07233cbb386c..286313f6bb7267f8e8a23a73d0c98f72daf96e17 100644 (file)
@@ -1047,7 +1047,7 @@ static inline int IO_APIC_irq_trigger(int irq)
 }
 
 /* irq_vectors is indexed by the sum of all RTEs in all I/O APICs. */
-u8 irq_vector[NR_IRQ_VECTORS] = { FIRST_DEVICE_VECTOR , 0 };
+u8 irq_vector[NR_IRQ_VECTORS];
 
 int assign_irq_vector(int irq)
 {
index 78572a132bd868cc8c035c468f349b7d3cfa9df0..6b296bb8e95585a6c323bb0df5096365ee0deac2 100644 (file)
@@ -1176,7 +1176,6 @@ asmlinkage void vmx_vmexit_handler(struct cpu_user_regs regs)
     }
     case EXIT_REASON_EXTERNAL_INTERRUPT: 
     {
-        extern int vector_irq[];
         extern asmlinkage void do_IRQ(struct cpu_user_regs *);
         extern void smp_apic_timer_interrupt(struct cpu_user_regs *);
         extern void timer_interrupt(int, void *, struct cpu_user_regs *);
index 1a38b524a671219e012cca1bf56b8008043eca78..6036e849c52334dc891e36586646ca0c514e61e0 100644 (file)
@@ -12,6 +12,7 @@ extern void disable_irq(unsigned int);
 extern void disable_irq_nosync(unsigned int);
 extern void enable_irq(unsigned int);
 
+extern int vector_irq[NR_VECTORS];
 extern u8 irq_vector[NR_IRQ_VECTORS];
 #define IO_APIC_VECTOR(irq)     irq_vector[irq]
 #define AUTO_ASSIGN             -1